<?php

namespace Dddxiu;

use Dddxiu\traits\Singleton;

/**
 * 消息处理
 */
class Message
{
    use Singleton;

    public function __construct($lang = 'zh_cn')
    {
        $this->lang = $lang;
        $this->load();
    }


    /**
     * 加载语言文件
     * @param string $path 文件路径
     * @return void
     */
    public function load($path = '')
    {
        if (empty($path)) {
            $path = dirname(__DIR__) . "/lang/{$this->lang}.php";
        }
        $this->msgs = include_once $path;
    }


    /**
     * 校对器注册错误提示
     * @param string $key 校验器的键
     * @param string $msg 不通过返回的消息
     * @return void
     */
    private function register($key = '', $msg = 'error')
    {
        $this->msgs[$key] = $msg;
    }


    /**
     * 格式化错误
     * name => r|w
     *     1. name.r
     *     2. name.w
     * @param string $t 错误类型
     * @param array $p 参数[$field, [$min, $max]]
     * @param array $c 自定义消息
     * @return array
     */
    private function format($t = '', $p = [], $c = [])
    {
        if (array_key_exists($t, $c)) {
            $msg = $c[$t];
        } else if (array_key_exists($t, $this->msgs)) {
            $msg = $this->msgs[$t];
        } else {
            $msg = $p[0] . ' error';
        }

        $msg = str_replace(':field', $p[0], $msg);
        switch (count($p[1])) {
            case 1:
                $msg = str_replace(':val', $p[1][0], $msg);
                break;
            case 2:
                $msg = str_replace(':min', $p[1][0], $msg);
                $msg = str_replace(':max', $p[1][1], $msg);
                break;
        }
        return $msg;
    }
}